]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Do something reasonable for width-for-height sizing
authorOwen W. Taylor <otaylor@fishsoup.net>
Sat, 8 May 2010 16:08:31 +0000 (12:08 -0400)
committerOwen W. Taylor <otaylor@fishsoup.net>
Mon, 10 May 2010 15:41:23 +0000 (11:41 -0400)
The StTable code only supports height-for-width. When called in
width-for-height sizing mode, instead of treating the -1 flag
value of 'for_width' as a real width, and requesting all the
children at 1 pixel wide, use the natural width of the table
as the width for determing the height.

Since we can't rewrap in width-for-height mode, we then report
the natural width also as the minimum width of the table.

https://bugzilla.gnome.org/show_bug.cgi?id=618104

src/st/st-table.c

index 19490773967ac1fb5e267a92b93af3602eb5b1c5..27f4eae029a4e734601a30387ab20db95697f648 100644 (file)
@@ -870,6 +870,14 @@ st_table_get_preferred_width (ClutterActor *self,
       total_pref_width += pref_widths[i];
     }
 
+  /* If we were requested width-for-height, then we reported minimum/natural
+   * heights based on our natural width. If we were allocated less than our
+   * natural width, then we need more height. So in the width-for-height
+   * case we need to disable shrinking.
+   */
+  if (for_height >= 0)
+    total_min_width = total_pref_width;
+
   if (min_width_p)
     *min_width_p = total_min_width;
   if (natural_width_p)
@@ -892,6 +900,17 @@ st_table_get_preferred_height (ClutterActor *self,
   gint i;
   gint *min_widths;
 
+  /* We only support height-for-width allocation. So if we are called
+   * width-for-height, calculate heights based on our natural width
+   */
+  if (for_width < 0)
+    {
+      float natural_width;
+
+      clutter_actor_get_preferred_width (self, -1, NULL, &natural_width);
+      for_width = natural_width;
+    }
+
   if (priv->n_rows < 1)
     {
       *min_height_p = 0;